package com.example.aiagent.app;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

import static com.example.aiagent.demo.invoke.VisionInvoke.fileDir;

public class KryoMultiWrite {

    public void appendText(String text, String filePath) throws IOException {
        // 1. 读取已有内容
        List<String> existingTexts = readAllTexts(filePath);

        // 2. 添加新文本
        existingTexts.add(text + "\n\n");

        // 3. 重新写入整个列表
        writeAllTexts(existingTexts, filePath);
    }

    public List<String> readAllTexts(String filePath) throws IOException {
        File file = new File(filePath);

        // 如果文件不存在或为空，返回空列表
        if (!file.exists() || file.length() == 0) {
            return new ArrayList<>();
        }

        try (FileInputStream fileIn = new FileInputStream(file);
             Input input = new Input(fileIn)) {

            Kryo kryo = new Kryo();
            kryo.register(ArrayList.class);
            kryo.register(String.class);

            return kryo.readObject(input, ArrayList.class);
        }
    }

    public void writeAllTexts(List<String> texts, String filePath) throws IOException {
        try (FileOutputStream fileOut = new FileOutputStream(filePath);
             Output output = new Output(fileOut)) {

            Kryo kryo = new Kryo();
            kryo.register(ArrayList.class);
            kryo.register(String.class);

            kryo.writeObject(output, texts);
            output.flush();
        }
    }

    // 新增方法：格式化输出文本，每条记录之间有空行
    public String getFormattedTexts(List<String> texts) {
        if (texts.isEmpty()) {
            return "没有保存的文本";
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < texts.size(); i++) {
            sb.append(i + 1).append(":\n")
                    .append(texts.get(i)).append("\n");
        }
        return sb.toString();
    }

//    public static void main(String[] args) {
//        String fileDir = System.getProperty("user.dir") + "/chat-memory";
//        String filePath = fileDir + "/" +"multi_texts.kryo";
//
//        try {
////            // 清除旧文件（如果存在）
////            new File(filePath).delete();
//
//            // 多次写入
//            appendText("这是第一次写入的文本包含多行内容：第一行第二行", filePath);
//            appendText("这是第二次写入的文本包含特殊字符：@#$%^&*()", filePath);
//            appendText("这是第三次写入的文本包含空行分隔", filePath);
//
//            // 读取所有内容
//            List<String> allTexts = readAllTexts(filePath);
//
//            // 格式化输出，每条记录之间有空行
//            System.out.println("=== 所有保存的文本 ===");
//            System.out.println(getFormattedTexts(allTexts));
//
//            // 显示文件信息
//            File file = new File(filePath);
//            System.out.println("文件大小: " + file.length() + " 字节");
//            System.out.println("保存条目: " + allTexts.size());
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }

//    public static void main(String[] args) throws IOException {
//        // 构造文件路径
//        String filePath = fileDir + "/" +"4.kryo";
//        KryoMultiWrite kryoMultiWrite = new KryoMultiWrite();
//        getFormattedTexts(filePath)
//    }
}